// 封装通过的接口逻辑
// 导入axios
import axios from 'axios'
// this没有指向,所以需要引进router才能解决token失效的问题,router跳转路由用的
import router from '@/router/index.js'
// 导入的代码必须放在最上边
// 配置通过的基准路径
axios.defaults.baseURL = 'http://api-toutiao-web.itheima.net/mp/v1_0/'
// 添加响应拦截器
axios.interceptors.request.use(function (config) {
  // 在发送请求之前做一些事情
  // 这里可以在接口调用之前统一添加请求头
  if (config.url !== 'authorizations') {
    config.headers.authorization = 'Bearer ' + sessionStorage.getItem('mytoken')
  }
  return config
}, function (error) {
  //  请求头失败可以做一些事情
  return Promise.reject(error)
})
// 添加响应拦截器(获取数据之前先经过响应拦截器)
axios.interceptors.response.use(function (response) {
  return response.data
}, function (error) {
  if (error.response.status === 401) {
    return router.push('/login')
  }
  // 凡是服务器返回的http状态吗是2XX之外的其他状态，都触发该方法（响应失败）
  // 这里可以对象错误信息做处理
  return Promise.reject(error)
})

// 导出axios
// export default axios
export const request = async (options) => {
  // 这里必须return.返回的结果是promise实例对象
  try {
    const ret = await axios({
      // 请求方式
      method: options.method || 'get',
      // 请求地址
      url: options.url || '#',
      // pos/put/delete请求参数
      data: options.data || {},
      // get请求参数
      params: options.params || {},
      // 请求头
      headers: options.headers || {}
    })
    // 数据第一条表示错误的信息,第二条表示正常的数据
    // 如果数据第一项是null 表示没有错误
    return [null, ret]
  } catch (e) {
    console.log(e)
    return [e, null]
  }
}
